#define _CRT_SECURE_NO_WARNINGS 1

//#include<iostream>
//#include<queue>
//
//using namespace std;
//
//int main()
//{
//	priority_queue<int, vector<int>, greater<int>> pq;
//
//	int n, k;
//	cin >> n >> k;
//
//	while (n--)
//	{
//		int t;
//		cin >> t;
//		pq.push(t);
//	}
//	int cnt = 0;
//	int ret = 0;
//	while (cnt <= k)
//	{
//		int t = pq.top();
//		pq.pop();
//		cnt += t;
//		t *= 2;
//		ret++;
//		pq.push(t);
//	}
//	cout << ret-1 << endl;
//
//	return 0;
//}







//
//#include<iostream>
//
//using namespace std;
//
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//	{
//		long long n, a, b;
//		cin >> n >> a >> b;
//
//		long long cnt = 0;
//
//		if (n <= 2)
//		{
//			cout << min(a, b) << endl;
//			continue;
//		}
//		else
//		{
//
//			if (3 * a > 2 * b)
//			{
//				cnt += (n / 3) * b;
//				n %= 3;
//				if (n == 1)
//					cnt += min(a, min(b, 2 * a - b));
//				if (n == 2)
//					cnt += min(min(a, b), 3 * a - b);
//			}
//			else
//			{
//				cnt += (n / 2) * a;
//				n %= 2;
//
//				if (n)
//					cnt += min(min(a, b), b - a);
//			}
//		}
//
//
//		cout << cnt << endl;
//	}
//
//	return 0;
//}





#include<iostream>

using namespace std;

int n = 0;
int arr[20];
bool dp[200] = { 0 };
int sum;

bool fun()
{
	if (sum % 2 ==  1)
		return false;
	dp[0] = true;
	sum /= 2;
	for (int i = 0; i < n; i++)
	{
		for (int j = sum; j >= arr[i]; j--)
		{
			dp[j] = dp[j] || dp[j - arr[i]];
		}
	}

	return dp[sum];
}

int main()
{
	long long x;
	cin >> x;
	while (x)
	{
		arr[n++] = x % 10;
		sum += x % 10;
		x /= 10;
	}
	if (fun())
	{
		cout << "Yes" << endl;
	}
	else
	{
		cout << "No" << endl;
	}
	

	return 0;
}